定義一個Collection
具有Key能力的結構,它將保存類型為向量Item
。
module Collection {
struct Item has store {
}
// 通常會在主資源上取名跟 module 一樣,來更好的進行閱讀
struct Collection has key {
items: vector<Item>
}
}
我們來實作如何開始新的收藏和在 account 下儲存資源。
address 0x5 {
module Collection {
use 0x1::Vector;
struct Item has store {}
struct Collection has key {
items: vector<Item>
}
public fun start_collection(account: &signer) {
move_to<Collection>(account, Collection {
items: Vector::empty<Item>()
})
}
}
}
上面範例使用了內置函數 move_to,將 signer 作為第一個參數和 collection 為第二個參數。
move_to 的 schema 為:
native fun move_to<T: key>(account: &signer, value: T);
透過這範例我們可以知道:
Move 提供了 exists 功能:
T 的類型可以接受任何資源的類型
native fun exists<T: key>(addr: address): bool;
address 0x5 {
module Collection {
struct Item has store, drop {}
struct Collection has store, key {
items: Item
}
// ... skipped ...
/// 回傳 true 如果 address 存在 Collection resource
public fun exists_at(at: address): bool {
exists<Collection>(at)
}
}
}
讓我們 Move to Day 19